# -*- coding: utf-8 -*-
'''
Created on 12/02/2010
@author: Joger Quintero
Módulo que genera la interfaz gráfica del paquete de contraseñas 
'''

import wx
import sys
import wx.aui

from comun import mensageError as msje, mensageAlerta as msja

#from comun import mensageError as msje, mensageAlerta as msja
from imagenes import images
from contrasenhas.controlador import Controlador

class TestListCtrl(wx.ListCtrl):
    
    def __init__(self, parent, ID, pos=wx.DefaultPosition,
                 size=(825,498), style=0):
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
        #listmix.ListCtrlAutoWidthMixin.__init__(self)
        


class VistaContrasenha(wx.Panel):
    '''
    Clase que genera la interfaz gráfica del paquete de contraseñas
    '''
    
    #Constructor de la clase
    def __init__(self,ventanaMadre):
        '''
        Creación de un objeto de tipo wx.Window para el módulo de contrasenhas.
        @param ventanaMadre:Objeto wx.Notebook 
        '''
        #La ventana principal de la aplicacion
        
        self.parent = ventanaMadre.parent
        self.ventanaHija = None
        self.controlador = Controlador(self)
        self.treePresionado = None
        self.itemListeleccionado = None
        self.botonEliminarCategoria = False
        
        wx.Panel.__init__(self, ventanaMadre, -1)
        #######################################################
        #IDs del tool kid
        self.idCrearBD = 10
        self.idAbrirBD = 20
        self.idCerrarBD = 40
        self.idAnhadirC = 50
        self.idEditarC = 60
        self.idEliminarC = 70
        self.idCrearClave = 80
        self.idVerClave = 90
        self.idEliminarClave = 100
        self.idGenerarClave = 110
        ######################################################
        #IDs del MEnu
        self.idMenuCrearBD = 50000
        self.idMenuAbrirBD = 50001
        self.idMenuCerrarBD = 50002
        self.idMenuAddCat = 60000
        self.idMenuEditCat = 60001
        self.idMenuElimCat = 60002
        self.idMenuCrearClave = 60003
        self.idMenuElimClave = 60004
        self.idMenuVerClave = 60005
        self.idMenuGenClave = 60006
        ######################################################
        
        self.SetAutoLayout(True)
        self.construirInterface()
        self.crearEventos()

        
    def construirInterface(self):
        #Hacemos el llamado a tool ya que esta es la primera pesataña que se crea
        self.tool()
        self.menu()
        self.controlador.deshabilitarTools()
        self.crearVentanas()
        self.crearAuiManager()
        #self.crearComponentes()
    
    def tool(self):
        
        self.parent.tb.ClearTools()
        self.parent.tb.AddSeparator()
        self.parent.tb.AddLabelTool(self.idCrearBD, "", images.getFileNew32Bitmap(), shortHelp="Crear Base de Datos: Agrega nuevas base de datos.")#longHelp="Long help for 'New'"
        self.parent.tb.AddLabelTool(self.idAbrirBD, "", images.getFileOpen32Bitmap(), shortHelp="Abrir Base de Datos: Accede a la base de datos o un grupo de estas con el fin de ejecutarlos en el sistema.")
        #self.parent.tb.AddLabelTool(30, "", images.getFileSave32Bitmap(), shortHelp="Salvar Base de Datos")
        self.parent.tb.AddLabelTool(self.idCerrarBD, "", images.getFileClose32Bitmap(),shortHelp="Cerrar Base de Datos: Finaliza la base de datos que se encuentra en ejecución dentro del sistema.")
        self.parent.tb.AddSeparator()
        self.parent.tb.AddLabelTool(self.idAnhadirC, "", images.getNewGroup32Bitmap(), shortHelp="Añadir Categoría: Agrega en los grupos nuevas categorias donde se guardan las contraseñas.")
        self.parent.tb.AddLabelTool(self.idEditarC, "", images.getEditGroup32Bitmap(), shortHelp="Editar Categoría: Modifica los nombres de las categorias que están dentro de los grupos.")
        self.parent.tb.AddLabelTool(self.idEliminarC, "", images.getDeleteGroup32Bitmap(), shortHelp="Eliminar Categoría: Quita categorias que se encuentran dentro de los grupos.")
        self.parent.tb.AddSeparator()
        self.parent.tb.AddLabelTool(self.idCrearClave, "", images.getNewEntry32Bitmap(), shortHelp="Crear Contraseña: Inserta contraseñas creadas por el usuario en los diferentes sistemas, ejemplo (Hotmail, Gmail, Faccebook, etc).")
        self.parent.tb.AddLabelTool(self.idVerClave, "", images.getEditEntry32Bitmap(), shortHelp="Ver/Editar Contraseña: Percibir y modificar contraseñas creadas dentro de las categorías.")
        self.parent.tb.AddLabelTool(self.idEliminarClave, "", images.getDeleteEntry32Bitmap(), shortHelp="Eliminar Contraseña: Quita contraseñas creadas dentro de las categorías.")
        self.parent.tb.AddLabelTool(self.idGenerarClave, "", images.getGenerator32Bitmap(), shortHelp="Generar Contraseña: Crea nuevas contraseñas")
        self.parent.tb.AddSeparator()
        
        
            
        
    def menu(self):
        
        self.itemsMenuArchivo = wx.Menu()
        #Item 1
        self.itemCBD = wx.MenuItem(self.itemsMenuArchivo, self.idMenuCrearBD, "&Crear Base de Datos\tCtrl+C", "")
        self.itemCBD.SetBitmap(images.getFileNewBitmap())
        self.itemsMenuArchivo.AppendItem(self.itemCBD)
        #Item 2
        self.itemABD = wx.MenuItem(self.itemsMenuArchivo, self.idMenuAbrirBD, "&Abrir Base de Datos\tCtrl+A", "")
        self.itemABD.SetBitmap(images.getFileOpenBitmap())
        self.itemsMenuArchivo.AppendItem(self.itemABD)
        #Item 4
        self.itemCEBD = wx.MenuItem(self.itemsMenuArchivo, self.idMenuCerrarBD, "C&errar Base de Datos\tCtrl+E", "")
        self.itemCEBD.SetBitmap(images.getFileCloseBitmap())
        self.itemsMenuArchivo.AppendItem(self.itemCEBD)
        #
        self.parent.MiMenuBar.Append(self.itemsMenuArchivo,"&Archivo")
        ################################################################
        self.itemsMenuEditar = wx.Menu()
        #Item 1
        self.itemAC = wx.MenuItem(self.itemsMenuEditar, self.idMenuAddCat, "Añadir Cate&goría\tCtrl+G", "")
        self.itemAC.SetBitmap(images.getNewGroupBitmap())
        self.itemsMenuEditar.AppendItem(self.itemAC)
        #Item 2
        self.itemEC = wx.MenuItem(self.itemsMenuEditar, self.idMenuEditCat, "E&ditar Categoría\tCtrl+D", "")
        self.itemEC.SetBitmap(images.getEditGroupBitmap())
        self.itemsMenuEditar.AppendItem(self.itemEC)
        #Item 3
        self.itemELC = wx.MenuItem(self.itemsMenuEditar, self.idMenuElimCat, "Elimi&nar Categoría\tCtrl+N", "")
        self.itemELC.SetBitmap(images.getDeleteGroupBitmap())
        self.itemsMenuEditar.AppendItem(self.itemELC)
        #Separador
        self.itemsMenuEditar.AppendSeparator()
        #Item 4
        self.itemCC = wx.MenuItem(self.itemsMenuEditar, self.idMenuCrearClave, "Crear C&ontraseña\tCtrl+O", "")
        self.itemCC.SetBitmap(images.getNewEntryBitmap())
        self.itemsMenuEditar.AppendItem(self.itemCC)
        #Item 5
        self.itemECL = wx.MenuItem(self.itemsMenuEditar, self.idMenuElimClave, "Elimi&nar Contraseña\tCtrl+N", "")
        self.itemECL.SetBitmap(images.getDeleteEntryBitmap())
        self.itemsMenuEditar.AppendItem(self.itemECL)
        #Item 6
        self.itemVEC = wx.MenuItem(self.itemsMenuEditar,self.idMenuVerClave, "&Ver/Editar Contraseña\tCtrl+V", "")
        self.itemVEC.SetBitmap(images.getEditEntryBitmap())
        self.itemsMenuEditar.AppendItem(self.itemVEC)
        #Separador
        self.itemsMenuEditar.AppendSeparator()
        #Item 7
        self.itemGC = wx.MenuItem(self.itemsMenuEditar, self.idMenuGenClave, "Generar Con&traseña\tCtrl+T", "")
        self.itemGC.SetBitmap(images.getGeneratorBitmap())
        self.itemsMenuEditar.AppendItem(self.itemGC)
        
        self.parent.MiMenuBar.Append(self.itemsMenuEditar,"&Editar")
    
    
    def crearVentanas(self):
        
        self.panelA = wx.Window(self, -1, style=wx.NO_BORDER)
        self.crearListCtrl()
        self.listCtrl.SetImageList(self.listaImagenes, wx.IMAGE_LIST_SMALL)
        
        
        self.panelB = wx.Window(self, -1, style=wx.NO_BORDER)
        self.crearMenuIzquierdo()
        
        self.panelC = wx.Window(self, -1, style=wx.NO_BORDER)
        self.panelC.SetBackgroundColour(wx.WHITE)
        self.txtPanelC = wx.StaticText(
                    self.panelC, -1,
                    "Inicio de la aplicación",
                    (5,5), (-1, 50)
                    )
    
    
    def crearListCtrl(self):
        
        self.listCtrl = TestListCtrl(self.panelA, -1,
                                 style=wx.wx.BORDER_SUNKEN
                                 | wx.LC_REPORT 
                                 #| wx.BORDER_NONE
                                 #| wx.LC_EDIT_LABELS
                                 | wx.LC_SORT_ASCENDING
                                 #| wx.LC_NO_HEADER
                                 | wx.LC_VRULES
                                 | wx.LC_HRULES
                                 | wx.LC_SINGLE_SEL
                                 )
        
        self.listaImagenes = wx.ImageList(16, 16)
        #Cramos la  imagen de carpeta en a lista del listctrl
        self.imagenLista = self.listaImagenes.Add(images.getFileNewBitmap())
        
        #Añadimos la lista de imagenes en el listcrtl
        self.listCtrl.SetImageList(self.listaImagenes, wx.IMAGE_LIST_SMALL)
        #Creamos la cabeceras del archivo 
        self.listCtrl.InsertColumn(0, "Título")
        self.listCtrl.InsertColumn(1, "Usuario",wx.LIST_FORMAT_LEFT)
        #self.listCtrl.InsertColumn(2, "URL",wx.LIST_FORMAT_LEFT)
        self.listCtrl.InsertColumn(2, "Contraseña")
        self.listCtrl.InsertColumn(3, "Comentarios")
        
        self.listCtrl.SetColumnWidth(0,160)#wx.LIST_AUTOSIZE_USEHEADER
        self.listCtrl.SetColumnWidth(1,160)
        #self.listCtrl.SetColumnWidth(2,160)
        self.listCtrl.SetColumnWidth(2,160)
        self.listCtrl.SetColumnWidth(3,300)
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        object_1.Add(self.listCtrl, 1, wx.EXPAND)
        self.panelA.SetSizer(object_1)
        object_1.Fit(self.panelA)
        
        
        
        
    def crearMenuIzquierdo(self):
        
        tID = wx.NewId()
        self.tree = MyTreeCtrl(self.panelB, tID, wx.DefaultPosition, (240, 700),
                               wx.TR_DEFAULT_STYLE
                               #wx.TR_HAS_BUTTONS
                               #| wx.TR_EDIT_LABELS
                               #| wx.TR_MULTIPLE
                               | wx.TR_HIDE_ROOT
                               )
        isz = (16,16)
        il = wx.ImageList(isz[0], isz[1])
        self.tree.SetImageList(il)
        img = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER,wx.ART_OTHER, isz))
        self.il = il
        self.fldropenidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN,   wx.ART_OTHER, isz))
        self.fldridx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
        self.root = self.tree.AddRoot("")
        self.tree.SetPyData(self.root, None)
        self.tree.SetItemImage(self.root,img, wx.TreeItemIcon_Normal)
        
        #self.controlador.listarCategorias()
    
    def crearAuiManager(self):
        
        self.mgr = wx.aui.AuiManager()
        self.mgr.SetManagedWindow(self)
        self.mgr.AddPane(self.panelA, wx.aui.AuiPaneInfo().CenterPane().Name("Panel A"))
        self.mgr.AddPane(self.panelB,
                         wx.aui.AuiPaneInfo().
                         Left().Layer(2).BestSize((240, -1)).
                         MinSize((160, -1)).
                         Floatable(False).FloatingSize((240, 700)).
                         Caption("GRUPOS").
                         CloseButton(False).
                         Name("Panel B"))
        self.mgr.AddPane(self.panelC,
                         wx.aui.AuiPaneInfo().
                         Bottom().BestSize((-1, 150)).
                         MinSize((-1, 60)).
                         Floatable(False).FloatingSize((500, 160)).
                         Caption("Mensajes").
                         CloseButton(False).
                         Name("Panel C"))

        #self.auiConfigurations[DEFAULT_PERSPECTIVE] = self.mgr.SavePerspective()
        self.mgr.Update()

        self.mgr.SetFlags(self.mgr.GetFlags() ^ wx.aui.AUI_MGR_TRANSPARENT_DRAG)
    
    def crearEventos(self):


        self.Bind(wx.EVT_SIZE, self.OnCPSize)
        self.parent.Bind(wx.EVT_TOOL, self.controlador.verificarBDAbierta, id=self.idCrearBD)
        self.parent.Bind(wx.EVT_TOOL, self.controlador.verificarBDAbierta, id=self.idAbrirBD)
        self.parent.Bind(wx.EVT_TOOL, self.controlador.verificarCerrarBD, id=self.idCerrarBD)
        self.parent.Bind(wx.EVT_TOOL, self.crearCategoria, id=self.idAnhadirC)
        self.parent.Bind(wx.EVT_TOOL, self.editarCategoria,id=self.idEditarC)
        self.parent.Bind(wx.EVT_TOOL, self.eliminarCategoria,id=self.idEliminarC)
        self.parent.Bind(wx.EVT_TOOL, self.crearClave,id=self.idCrearClave)
        self.parent.Bind(wx.EVT_TOOL, self.modificarClave,id=self.idVerClave)
        self.parent.Bind(wx.EVT_TOOL, self.eliminarClave,id=self.idEliminarClave)
        self.parent.Bind(wx.EVT_TOOL, self.generarClave,id=self.idGenerarClave)
        #
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.itemSeleccionado, self.listCtrl)
        #
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.treeSeleccionado, self.tree)
        #
        
        self.parent.Bind(wx.EVT_MENU,self.controlador.verificarBDAbierta,id=self.idMenuCrearBD)
        self.parent.Bind(wx.EVT_MENU,self.controlador.verificarBDAbierta,id=self.idMenuAbrirBD)
        self.parent.Bind(wx.EVT_MENU,self.controlador.verificarCerrarBD,id=self.idMenuCerrarBD)
        self.parent.Bind(wx.EVT_MENU,self.crearCategoria,id=self.idMenuAddCat)
        self.parent.Bind(wx.EVT_MENU,self.editarCategoria,id=self.idMenuEditCat)
        self.parent.Bind(wx.EVT_MENU,self.eliminarCategoria,id=self.idMenuElimCat)
        self.parent.Bind(wx.EVT_MENU,self.crearClave,id=self.idMenuCrearClave)
        self.parent.Bind(wx.EVT_MENU,self.eliminarClave,id=self.idMenuElimClave)
        self.parent.Bind(wx.EVT_MENU,self.modificarClave,id=self.idMenuVerClave)
        self.parent.Bind(wx.EVT_MENU,self.generarClave,id=self.idMenuGenClave)
        

        #
        self.tree.Bind(wx.EVT_RIGHT_DOWN, self.clickIzquierdo)
        
    
    def OnCPSize(self,evt):
        self.SetPosition((0,0))
        self.SetSize(evt.GetSize())

    def clickIzquierdo(self,evt):

        if self.treePresionado:
            if not hasattr(self, "popupID1"):
                self.popupID1 = wx.NewId()
                self.popupID2 = wx.NewId()
            
                self.Bind(wx.EVT_MENU, self.editarCategoria, id=self.popupID1)
                self.Bind(wx.EVT_MENU, self.eliminarCategoria, id=self.popupID2)
            

            # make a menu
            menu = wx.Menu()
            # add some other items
            menu.Append(self.popupID1, "Editar")
            menu.Append(self.popupID2, "Eliminar")


            # Popup the menu.  If an item is selected then its handler
            # will be called before PopupMenu returns.
            self.PopupMenu(menu)
            menu.Destroy()
            #print self.tree.GetItemText(self.treePresionado)

    def generarClave(self,evt):
        
        msja(self,"¡En construcción!")
    
    def abrirBD(self):
        
        win = FrameAbrirBD(self, -1, "Abrir Base de Datos", size=(260, 170),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        
        self.parent.Enable(False)
        
    def crearBD(self):
        
        win = FrameCrearBD(self, -1, "Crear Base de Datos", size=(300, 180),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        self.parent.Enable(False)
    
    def crearCategoria(self,evt):
        
        win = FrameCrearCategoria(self, -1, "Crear Categoría", size=(260, 120),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        self.parent.Enable(False)
    
    def treeSeleccionado(self,evt):
        
        #Cuando se hace un borrado del treectrl, wxpython hace
        #un llamado al evento wx.EVT_TREE_SEL_CHANGED.
        #El borrado del treectrl solo se llama cuando se cierra la base de datos,
        #Este método de cerrar la base de datos borra las variables de conexión, haciendo
        #que se produzca un error aqui. No logré ver como evitar que al hacer un borrado
        #del treectrl no se llama al evento wx.EVT_TREE_SEL_CHANGED, y es por eso que
        # antes de ejecuitar el código de abajo verifico que no exista un valor para la 
        #variable self.controlador.nombreBD.

        #TAMBIEN cuando se elimina un item con la funcion self.controlador.eliminarCategoria() es llamado el evento
        #wx.EVT_TREE_SEL_CHANGED. Para evitar que me active los botones de Editar grupo, Eliminar grupo y crear clave
        #TUVE que hacer una trampa, crear una varialbe con el nombre self.botonEliminarCategoria la cual inicio en False
        #y cuando se presiona el boton eliminar categoria le doy el valor de True para que no ejecuta nada de este codigo
        #NO SUPE COMO RESOLVER ESTO SIN HACER ESTA TRAMPA
        
        if self.controlador.nombreBD and not self.botonEliminarCategoria:
            
            self.treePresionado = evt.GetItem()
            self.controlador.habilitarEditarG(True)
            self.controlador.habilitarEliminarG(True)
            self.controlador.habilitarCrearClave(True)
            self.controlador.listarContrasegnas()

        else:
            #Procedo
            self.botonEliminarCategoria = False
    
    def itemSeleccionado(self,evt):
        
        self.itemListeleccionado = evt.m_itemIndex
        self.controlador.habilitarVerClave(True)
        self.controlador.habilitarEliminarClave(True)
        
        
        
    def editarCategoria(self,evt):
        
        win = FrameEditarCategoria(self, -1, "Modificar Categoría", size=(280, 120),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        self.parent.Enable(False) 
    
    def eliminarCategoria(self,evt):
        self.controlador.eliminarCategoria()
    
    def crearClave(self,evt):
        #self.controlador.listarContrasegnas()
        #print "Hola"
        win = FrameCrearClave(self, -1, u"Crear Contraseña", size=(390, 350),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        self.parent.Enable(False)
    
    def modificarClave(self,evt):
        
        #Sacamos los datos del listCrtl para enviarselos a la ventana
        titulo = self.listCtrl.GetItemText(self.itemListeleccionado)
        usuario = self.listCtrl.GetItem(self.itemListeleccionado, 1).GetText()
        contrasenha = self.controlador.modelo.diccionarioDatos[self.itemListeleccionado][4] 
        confirmacion = contrasenha
        comentario = self.listCtrl.GetItem(self.itemListeleccionado, 3).GetText()
        
        #self.listCtrl.GetItemText(self.itemListeleccionado), , ,)
        win = FrameModificarClave(self, -1, u"Modificar Contraseña", titulo, usuario,contrasenha,confirmacion,comentario, size=(390, 350))
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        self.parent.Enable(False)
    
    def eliminarClave(self,evt):
        
        self.controlador.eliminarClave()
        
#############################################################################################################
class MyTreeCtrl(wx.TreeCtrl):
    def __init__(self, parent, id, pos,size, style):
        wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
        

    def OnCompareItems(self, item1, item2):
        t1 = self.GetItemText(item1)
        t2 = self.GetItemText(item2)
        #self.log.WriteText('compare: ' + t1 + ' <> ' + t2 + '\n')
        if t1 < t2: return -1
        if t1 == t2: return 0
        return 1

#############################################################################################################

class FrameClave(wx.Frame):
    
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        #self.msje = msje
        #self.msja = msja
        panel = wx.Panel(self,-1)
        ###########################################
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lTitulo = wx.StaticText(panel, -1, u"Título(*)")
        self.iTitulo = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iTitulo.SetToolTipString("Ingrese el titulo de la clave que desea crear")
        self.lUsuario = wx.StaticText(panel, -1, u"Usuario(*)")
        self.iUsuario = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iUsuario.SetToolTipString("Nombre del usuario que desea recordar")
        self.lContrasenha = wx.StaticText(panel, -1, u"Contraseña(*)")
        self.iContrasenha = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iContrasenha.SetToolTipString("La clave que desea recordar")
        self.lConfirmacion = wx.StaticText(panel, -1, u"Confirmar Clave(*)")
        self.iConfirmacion = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iConfirmacion.SetToolTipString("Vuelva a ingrear la clave para su respectiva confirmación")
        self.lComentario = wx.StaticText(panel, -1, u"Comentario")
        self.iComentario = wx.TextCtrl(panel, -1, "",size=(200, 100), style=wx.TE_MULTILINE|wx.TE_RICH2)
        self.iComentario.SetToolTipString("Comentario relacionado a la clave que está creando")
        
        
        
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100,30) )
        self.bCerrar = wx.Button(panel, wx.ID_CLOSE, size=(100,30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        #self.bVer = wx.Button(self, 3010, "Ver", (5, 5))
        bmp = images.getPWShowBitmap()
        self.bVer = wx.BitmapButton(panel, -1, bmp, (15, 10),(bmp.GetWidth() + 15, bmp.GetHeight() + 15))
        ##self.bVer.SetBitmapSelected(images.getPWHideBitmap())
        self.bVer.SetToolTipString("Ver Contraseña")
        ##
        self.cajaHorizontal = wx.BoxSizer(wx.HORIZONTAL)
        self.cajaHorizontal.Add(self.iContrasenha)
        self.cajaHorizontal.Add(self.bVer)
        
        
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lTitulo, self.iTitulo,
                        self.lUsuario,self.iUsuario,
                        self.lContrasenha,self.cajaHorizontal,
                        self.lConfirmacion, self.iConfirmacion,
                        self.lComentario, self.iComentario,
                        ])
        
        object_1.Add(sizer,0,wx.ALL,25)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_BUTTON, self.cambiarPassword, self.bVer)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
        #self.Bind(wx.EVT_BUTTON, self.OnClick, self.bVer)
    
    
        
    def cambiarPassword(self,event):
        
        
        if self.bVer.GetLabelText() == "Ocultar":  
            self.iContrasenha.SetWindowStyle(wx.TE_PASSWORD)
            self.iConfirmacion.SetWindowStyle(wx.TE_PASSWORD)
            self.bVer.SetLabel("Ver")
            self.bVer.SetBitmapLabel(images.getPWShowBitmap())
        else:
            self.iContrasenha.SetWindowStyle(0)
            self.iConfirmacion.SetWindowStyle(0)
            self.bVer.SetLabel("Ocultar")
            self.bVer.SetBitmapLabel(images.getPWHideBitmap())
             
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
#############################################################################################################
class FrameCrearClave(FrameClave):
    
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        FrameClave.__init__(self, parent, ID, title, pos, size, style=style)        
        
        self.Bind(wx.EVT_BUTTON, self.crearClave, self.bAceptar)
        
    
    def crearClave(self,event):
        
        self.parent.controlador.crearClave(self.iTitulo,self.iUsuario,self.iContrasenha,self.iConfirmacion,self.iComentario)
        
############################################################################################################

class FrameModificarClave(FrameClave):
    
    def __init__(self, parent, ID, title, titulo,usuario,contrasenha,confirmacion,comentario,pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
        
        FrameClave.__init__(self,parent, ID, title, size=(390, 350),style=style)
        
        self.tituloOriginal = titulo
        self.iTitulo.SetValue(titulo)
        self.iUsuario.SetValue(usuario)
        self.iContrasenha.SetValue(contrasenha)
        self.iConfirmacion.SetValue(confirmacion)
        self.iComentario.SetValue(comentario)
        
        self.Bind(wx.EVT_BUTTON, self.modificarClave, self.bAceptar)
        
    def modificarClave(self,evt):
        
        self.parent.controlador.modificarClave(self.tituloOriginal,self.iTitulo,self.iUsuario,self.iContrasenha,self.iConfirmacion,self.iComentario)        
         
#############################################################################################################
class FrameCrearCategoria(wx.Frame):
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        #self.msje = msje
        #self.msja = msja
        panel = wx.Panel(self, -1)
        ###########################################
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lNombre = wx.StaticText(panel, -1, "Catagoría(*)")
        self.iNombre = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iNombre.SetToolTipString("Ingrese el nombre de la nueva categoría")
        boxCampos = wx.BoxSizer(wx.HORIZONTAL)
        boxCampos.Add(self.lNombre,0,wx.TOP,30)
        boxCampos.Add(self.iNombre,0,wx.TOP,30)
        
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100,30))
        self.bCerrar = wx.Button(panel, wx.ID_CLOSE, size=(100,30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        ##
        #sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        #sizer.AddMany([ self.lNombre, self.iNombre,])
        
        object_1.Add(boxCampos,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        object_1.Add(boxBotones,0,wx.TOP | wx.ALIGN_CENTER_HORIZONTAL,15)
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.crearCategoria, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def crearCategoria(self,event):
        
        self.parent.controlador.crearCategoria(self.iNombre)
        
#############################################################################################################

class FrameEditarCategoria(wx.Frame):
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        ###########################################
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lCategoriaVieja = wx.StaticText(self, -1, "Editar: ")
        self.lNombreEditar = wx.StaticText(self, -1, self.parent.tree.GetItemText(self.parent.treePresionado))
        self.lNombreEditar.SetToolTipString("Nombre de la categoría que desea editar")
        self.lNombre = wx.StaticText(self, -1, "Nueva(*)")
        self.iNombre = wx.TextCtrl(self, -1, "",size=(120,30))
        self.iNombre.SetToolTipString("Ingrese el nuevo nombre de la categoría")
        self.bAceptar = wx.Button(self, wx.ID_OK, size=(100,30))
        self.bCerrar = wx.Button(self, wx.ID_CLOSE, size=(100,30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.TOP,15)
        boxBotones.Add(self.bCerrar,0,wx.TOP,15)
        
        ##
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lCategoriaVieja, self.lNombreEditar,
                        self.lNombre, self.iNombre,
                        ])
        
        object_1.Add(sizer,0,wx.ALIGN_CENTER_HORIZONTAL | wx.TOP,20)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        #Fijamos  los componentes a la ventana
        self.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.editarCategoria, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def editarCategoria(self,event):
        
        self.parent.controlador.editarCategoria(self.iNombre)    

#############################################################################################################

class FrameCrearBD(wx.Frame):
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        #self.msje = msje
        #self.msja = msja
        panel = wx.Panel(self, wx.ID_ANY)
        ###########################################
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lNombre = wx.StaticText(panel, -1, "Nombre(*)")
        self.iNombre = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iNombre.SetToolTipString("Nombre de la base de datos a crear")
        self.lClave = wx.StaticText(panel, -1, "Clave(*)")
        self.iClave = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iClave.SetToolTipString("Password que se asociará al nombre de la base de datos")
        self.lConfirmacion = wx.StaticText(panel, -1, "Confirmar clave(*)")
        self.iConfirmacion = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iConfirmacion.SetToolTipString("Vuelva a ingrear la clave para su respectiva confirmación")
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100,30))
        self.bCerrar = wx.Button(panel, wx.ID_CLOSE, size=(100, 30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        ##
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lNombre, self.iNombre,
                        self.lClave, self.iClave,
                        self.lConfirmacion, self.iConfirmacion,
                        ])
        
        
        object_1.Add(sizer,0,wx.ALL,25)
        #object_1.Add(boxBotones,0,wx.LEFT,70)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.crearBaseDatos, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def crearBaseDatos(self,event):
        #Verificamos el password
        self.parent.controlador.crearBaseDatos(self.iNombre,self.iClave,self.iConfirmacion)
        
    

#############################################################################################################

class FrameAbrirBD(wx.Frame):
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        panel = wx.Panel(self, wx.ID_ANY)
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lNombre = wx.StaticText(panel, -1, "Nombre(*)")
        self.iNombre = wx.Choice(panel, -1, (50, 50), choices = self.parent.controlador.modelo.listarBD())
        self.iNombre.SetToolTipString("Seleccione el nombre de la base de datos a la que se desea conectar")
        self.lClave = wx.StaticText(panel, -1, "Clave(*)")
        self.iClave = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iClave.SetToolTipString("Ingrese la clave asociada a la base de datos")
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100, 30))
        self.bCerrar = wx.Button(panel,wx.ID_CLOSE,size=(100,30))
        
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        ##
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lNombre, self.iNombre,
                        self.lClave, self.iClave,
                        ])
        
        object_1.Add(sizer,0,wx.ALL,25)
        #object_1.Add(boxBotones,0,wx.LEFT,50)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.abrirBD, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def abrirBD(self,event):
        #Verificamos el password
        if self.iNombre.GetCurrentSelection() == 0:
            msja(self,"Seleccione una base de datos");
        else:
            self.parent.controlador.abrirBD(self.iNombre.GetStringSelection(),self.iClave.GetValue())
        
    
    

